package cn.iocoder.yudao.module.lowcode.core.naming;

import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.lowcode.enums.NamingConventionEnum;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

/**
 * 数据源命名配置 DO
 * 
 * 用于配置不同数据源的字段命名规则
 *
 * @author 芋道源码
 */
@TableName("lowcode_naming_config")
@KeySequence("lowcode_naming_config_seq")
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class NamingConfigDO extends BaseDO {

    /**
     * 配置ID
     */
    @TableId
    private Long id;

    /**
     * 数据源ID
     */
    private Long dataSourceId;

    /**
     * 表名（可选，为空表示数据源级别的默认配置）
     */
    private String tableName;

    /**
     * 数据库字段命名规则
     * 
     * 枚举 {@link NamingConventionEnum}
     */
    private String databaseNamingConvention;

    /**
     * 前端接口命名规则（通常为camelCase）
     */
    private String frontendNamingConvention;

    /**
     * 是否启用智能检测
     * 
     * true: 系统自动检测字段命名格式
     * false: 使用配置的命名格式
     */
    private Boolean autoDetectEnabled;

    /**
     * 自定义字段映射规则（JSON格式）
     * 
     * 例如: {"old_field": "newField", "special_id": "specialId"}
     */
    private String customFieldMapping;

    /**
     * 配置优先级
     * 
     * 数字越大优先级越高，表级配置 > 数据源级配置 > 默认配置
     */
    private Integer priority;

    /**
     * 是否启用此配置
     */
    private Boolean enabled;

    /**
     * 配置描述
     */
    private String description;

    /**
     * 最后检测时间
     */
    private java.time.LocalDateTime lastDetectedTime;

    /**
     * 检测到的字段样本（用于验证配置正确性）
     */
    private String detectedSamples;
}